﻿namespace CSharpPro._1023;

public class Demo4
{
    //作业1
    public void TestPrint8()
    {
        // 测试数组
        int[] array = { 64, 34, 25, 12, 22, 11, 90 };
        Console.WriteLine("排序前的数组:");
        PrintArray(array);

        // 调用冒泡排序方法
        BubbleSort(array);

        Console.WriteLine("\n排序后的数组:");
        PrintArray(array);
    }

    // 冒泡排序方法
    static void BubbleSort(int[] arr)
    {
        int n = arr.Length;
        // 外层循环控制需要进行多少轮比较
        for (int i = 0; i < n - 1; i++)
        {
            // 内层循环控制每轮比较的元素范围
            // 每完成一轮，最大的元素会"浮"到末尾，所以下一轮可以少比较一个元素
            for (int j = 0; j < n - i - 1; j++)
            {
                // 如果当前元素大于下一个元素，则交换它们
                if (arr[j] > arr[j + 1])
                {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    // 打印数组的方法
    static void PrintArray(int[] arr)
    {
        foreach (int item in arr)
        {
            Console.Write(item + " ");
        }
    }
    //作业2
    

// 学生类定义
public class Student
{
    // 私有字段
    private string _studentId;  // 学号
    private string _name;       // 姓名
    private int _age;           // 年龄
    private string _major;      // 专业
    private double _gpa;        // 平均绩点

    // 无参构造函数
    public Student() { }

    // 全参构造函数
    public Student(string studentId, string name, int age, string major, double gpa)
    {
        StudentId = studentId;  // 使用属性赋值（触发验证逻辑）
        Name = name;
        Age = age;
        Major = major;
        Gpa = gpa;
    }

    // 属性（带验证逻辑）
    public string StudentId
    {
        get => _studentId;
        set
        {
            if (string.IsNullOrWhiteSpace(value))
                throw new ArgumentException("学号不能为空");
            _studentId = value;
        }
    }

    public string Name
    {
        get => _name;
        set
        {
            if (string.IsNullOrWhiteSpace(value))
                throw new ArgumentException("姓名不能为空");
            _name = value;
        }
    }

    public int Age
    {
        get => _age;
        set
        {
            if (value < 16 || value > 30)
                throw new ArgumentException("学生年龄应在16-30岁之间");
            _age = value;
        }
    }

    public string Major
    {
        get => _major;
        set => _major = value ?? "未分配专业";  // 空值处理
    }

    public double Gpa
    {
        get => _gpa;
        set
        {
            if (value < 0 || value > 4)
                throw new ArgumentException("绩点应在0-4之间");
            _gpa = value;
        }
    }

    // 显示学生完整信息
    public void DisplayInfo()
    {
        Console.WriteLine("===== 学生信息 =====");
        Console.WriteLine($"学号：{_studentId}");
        Console.WriteLine($"姓名：{_name}");
        Console.WriteLine($"年龄：{_age}");
        Console.WriteLine($"专业：{_major}");
        Console.WriteLine($"平均绩点：{_gpa:F1}");  // 保留1位小数
        Console.WriteLine($"学业状态：{GetAcademicStatus()}");
        Console.WriteLine("====================");
    }

    // 根据绩点判断学业状态
    private string GetAcademicStatus()
    {
        if (_gpa >= 3.5) return "优秀";
        if (_gpa >= 2.0) return "良好";
        return "待提升";
    }
}
    public void TestPrint9()
    {
        try
        {
            // 创建学生对象（使用构造函数）
            Student student1 = new Student(
                "2024001", 
                "张明", 
                20, 
                "计算机科学与技术", 
                3.8
            );

            // 创建学生对象（使用无参构造+属性赋值）
            Student student2 = new Student();
            student2.StudentId = "2024002";
            student2.Name = "李华";
            student2.Age = 19;
            student2.Major = "软件工程";
            student2.Gpa = 2.5;

            // 显示学生信息
            Console.WriteLine("第一位学生信息：");
            student1.DisplayInfo();

            Console.WriteLine("\n第二位学生信息：");
            student2.DisplayInfo();

            // 演示修改信息
            Console.WriteLine("\n修改第二位学生的绩点...");
            student2.Gpa = 3.2;
            Console.WriteLine("修改后的第二位学生信息：");
            student2.DisplayInfo();
        }
        catch (ArgumentException ex)
        {
            Console.WriteLine($"错误：{ex.Message}");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"发生异常：{ex.Message}");
        }

        Console.WriteLine("\n按任意键退出...");
        Console.ReadKey();
    }
}